package day2;

import org.junit.Test;

import java.util.Arrays;
import java.util.Random;

import static java.util.Collections.swap;

public class RandomArray1 {

//插入排序
    public void insertSort(int[] arr){
        for(int i=1;i<arr.length;i++){
            int temp=arr[i];//使用temp临时存储数据
            int j=i-1;
            for(;j>=0;j--){
                if(temp<arr[j]){
                    //执行移动
                    arr[j+1]=arr[j];
                    System.out.println("\t:"+Arrays.toString(arr));
                }else{
                    break; //获得插入的位置
                }
            }
            arr[j+1]=temp;
        }
    }


    //冒泡排序
    public void bubbleSort(int[] arr){
        for(int i=0;i<arr.length-1;i++){
            for(int j=0;j<arr.length-i-1;j++){
                //比较两个相邻位置上的数据
                if(arr[j]>arr[j+1]){
                    swap(arr,j,j+1);
                }
            }
        }
    }







    @Test
    public void testSelectSort() {
        int[] arr = getRandomDataArray(20,100);
        System.out.println("排序前:"+Arrays.toString(arr));
        selectSort(arr);
        System.out.println("排序后:"+Arrays.toString(arr));
    }



    public void selectSort(int[] arr) {
        //使用i表示第一位的数据
        for(int i=0;i<arr.length-1;i++){
            //使用J表示i后面的数据范围
            for(int j=i+1;j<arr.length;j++){
                if(arr[j]<arr[i]){
                    swap(arr,i,j);
                }
            }
            System.out.println("\t第"+(i+1)+"轮排序:"+ Arrays.toString(arr));
        }
    }
    public void swap(int[] arr,int i,int j ){
        int temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
    }
    public int[] getRandomDataArray(int length, int bound) {
        int [] result=new int[length];
        boolean[] flags =new boolean[bound+1];
        Random r=new Random();
        for(int i=0;i<length;i++){
            int temp=r.nextInt(bound)+1;
            if(flags[temp]){
                i--;
                System.out.println("出现重复");
            }else{
                result[i]=temp;
                flags[temp]=true;
            }
        }
        return result;
    }

}
